package com.smart.platform.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.smart.platform.common.Result;
import com.smart.platform.common.ocr.OcrOnlyText;
import com.smart.platform.entity.Text;
import com.smart.platform.service.Ocrservice;
import com.smart.platform.service.TextService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@Slf4j
@RequestMapping("/text")
//@Api(tags = "单个题目信息添加接口")
public class TextController {
    @Autowired
    private TextService textService;

    //调用ocr的service层 用于识别图片信息并保存
    @Autowired
    private Ocrservice ocrservice;


    /* 评阅任务添加时需要确定考次 科目 题目 已经上传原卷信息
     * 因此再调用此方法时还需要单独请求upload方法拿到图片的url路径 并携带在请求体当中
     * @param text
     * @param ocrParam
     * @return
     */
    @ApiOperation(value = "批阅任务添加接口", notes = "需要考次 科目 题目 图片url 批阅人userId 针对url 需要单独请求upload方法拿到图片上传的url并携带在请求体当中")
    @PostMapping("/save")
    public Result<String> save(@RequestBody Text text) {
        //前端传递过来的是一个json格式的数据 其中包含 state course number question的信息（所以此处要调用ocr方法）
        log.info("新增批阅任务：{}", text.toString());
        //此处通过前端申请upload接口以后拿到图片的url 再将其
        List<OcrOnlyText> ocrTexts = ocrservice.ocrText(text.getImage());

        List<String> str = new ArrayList<>();
        for (OcrOnlyText ocrText : ocrTexts) {
            str.add(ocrText.getText());
        }
        //将返回的OCR数据转化为字符串
        String question = String.join(" ", str);
        text.setQuestion(question);

        log.info("试卷题目信息：{}", text.getQuestion());

        textService.save(text);
        return Result.success("批阅任务添加成功");
    }

    /**
     * @param
     * @return
     */
    @DeleteMapping
    public Result<String> delete(Long id) {


       /* LambdaQueryWrapper<Text> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Text::getState, text.getState())
                .eq(Text::getCourse, text.getCourse())
                .eq(Text::getGrade, text.getGrade())
                .eq(Text::getNumber, text.getNumber());*/

        textService.removeById(id);

        return Result.success("单个批阅任务信息删除成功");
    }

    /**
     * state course grade
     * 根据三个信息来查看当前以添加的原卷信息
     * @return
     */
    @GetMapping("/list")
    public Result<List<Text>> list(Integer state, Integer course, Integer grade) {
        log.info("考次：{}，科目：{}，年级：{}", state, course, grade);

        LambdaQueryWrapper<Text> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Text::getState, state)
                .eq(Text::getCourse, course)
                .eq(Text::getGrade, grade);

        List<Text> list = textService.list(queryWrapper);

        return Result.success(list);
    }

    /**
     * 根据id查询数据 用于数据回显
     *
     * @param
     * @return
     */
    @GetMapping
    public Result<Text> get(Long id) {

        Text textOne = textService.getById(id);

        return Result.success(textOne);
    }

    /**
     * 根据id修改
     *
     * @param text
     * @return
     */
    @PutMapping("/update")
    public Result<String> update(@RequestBody Text text) {
        log.info("修改后的数据:{}", text.toString());

        textService.updateById(text);

        return Result.success("信息修改成功");
    }

}
